前情提要
于 CentOS 部署同步写作 yuque-hexo
部署阶段
一、自有服务器解决思路
1.安装 yuque-hexo
npm i -g yuque-hexo
进一步了解可查阅 官方文档地址
2.配置 package.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| "yuqueConfig": { "postPath": "source/_posts/yuque", "cachePath": "yuque.json", "lastGeneratePath": "./last-generate-timestamp.txt", "baseUrl": "https://www.yuque.com/api/v2", "login": "catooilg", "repo": "kb", "onlyPublished": false, "onlyPublic": false, "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxx" "imgCdn": { "concurrency": 0, "imageBed": "oss", "enabled": true, "bucket": "icould", "region": "oss-cn-shenzhen", "prefixKey": "hexo-content/imgaes", } }, "scripts": { "build": "hexo generate", "clean": "hexo clean", "deploy": "hexo deploy", "server": "hexo server", "sync": "yuque-hexo sync", "clean:yuque": "yuque-hexo clean" }
|
注意 imgCdn 里面也包含其他图床
腾讯云图床
1 2 3 4 5 6 7 8 9 10
| "yuqueConfig": { "imgCdn": { "concurrency": 0, "imageBed": "cos", "enabled": true, "bucket": "image", "region": "ap-guangzhou", "prefixKey": "blog-images" } }
|
七千牛
1 2 3 4 5 6 7 8 9 10 11
| "yuqueConfig": { "imgCdn": { "concurrency": 0, "imageBed": "qiniu", "enabled": true, "bucket": "test-letttgaco", "region": "Zone_z2", "host": "https://img.domain.cc", "prefixKey": "blog-images" } }
|
Github 图床
1 2 3 4 5 6 7 8 9 10
| "yuqueConfig": { "imgCdn": { "concurrency": 1, "imageBed": "github", "enabled": true, "bucket": "LetTTGACO", "host": "cdn.jsdelivr.net", "prefixKey": "blog-images" } }
|
又拍云
1 2 3 4 5 6 7 8 9 10
| "yuqueConfig": { "imgCdn": { "concurrency": 0, "imageBed": "upyun", "enabled": true, "bucket": "letttgaco", "host": "https://upyun.1874.cool", "prefixKey": "blog-images" } }
|
如何获取语雀 Token?点击 个人头像 -> 设置 -> Token 即可获取
同时注册环境变量,为图床进一步配置
临时注册变量可以使用<font style="color:#24292E;">export </font>SECRET_ID<font style="color:#24292E;">=xxx</font>
与<font style="color:#24292E;">export </font>SECRET_KEY=xxx
永久注册变量可以 vim 修改/etc/profile 并 source 重载即可
如何获取各厂商图床 ID 和 KEY?清查阅云厂商密钥配置教程
各云厂商密钥配置教程
最后验证printenv
3.启动同步
npx yuque-hexo clean
第一次启动同步可以不选择清空缓存
SECRET_ID=$SECRET_ID SECRET_KEY=$SECRET_KEY npx yuque-hexo sync
4.启动 hexo
hexo clean && hexo g
二、部署在 Github/Gitee 解决思路
1.大纲
- 在语雀中新建一个知识库,知识库里配置 Web Hook。
- 在阿里云上创建函数计算模型**,**通过语雀的 Web Hook 去触发这个函数
- 函数中配置了 Travis-CI(中介体读取 github/gitee 的库) 的 token,repoid,强制让 travis-ci 重新 restart 一次
2.安装与配置
与其上方一样
3.创建 serverless 云函数计算
先开通阿里云开通函数计算,新建 HTTP 函数,运行环境选择 PHP7.2

按自己实际编写函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| <?php function main_handler($event, $context) { $update_title = ''; if($event->body){ $yuque_data= json_decode($event->body); $update_title .= $yuque_data->data->title; } $repos = 'xxxx'; $token = 'xxxxxx'; $message = date("Y/m/d").':yuque update:'.$update_title; $branch = 'master'; $queryString = $event->queryString; $q_token = $queryString->token ? $queryString->token : $token; $q_repos = $queryString->repos ? $queryString->repos : $repos; $q_message = $queryString->message ? $queryString->message : $message; $q_branch = $queryString->branch ? $queryString->branch : 'master'; echo($q_token); echo('==='); echo ($q_repos); echo ('==='); echo ($q_message); echo ('==='); echo ($q_branch); echo ('==='); $res_info = triggerTravisCI($q_repos, $q_token, $q_message, $q_branch);
$res_code = 0; $res_message = '未知'; if($res_info['http_code']){ $res_code = $res_info['http_code']; switch($res_info['http_code']){ case 200: case 202: $res_message = 'success'; break; default: $res_message = 'faild'; break; } } $res = array( 'status'=>$res_code, 'message'=>$res_message ); return $res; }
function triggerTravisCI ($repos, $token, $message='yuque update', $branch='master') { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api.travis-ci.org/repo/'.$repos.'/requests'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); $post_data = json_encode(array( "request"=> array( "message"=>$message, "branch"=>$branch ) )); $header = array( 'Content-Type: application/json', 'Travis-API-Version: 3', 'Authorization:token '.$token, 'Content-Length:' . strlen($post_data) ); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); $data = curl_exec($curl); $info = curl_getinfo($curl); curl_close($curl); return $info; } ?>
|
特此再声明一下:
$repo
是你在 Github / Gitte 的仓库 ID 一般是全数字 除非是自己自定义;不太清楚的可以通过 Postmen 请求
https://api.travis-ci.org/owner/你的 Github 账号/repos 获取,记得授权获取到 GitHub 的权限,Gitte 暂不支持。请求的时候请求头添加三个属性,
Authorization : token 你的 travis-ci token
Travis-API-Version : 3
User-Agent : API Explorer
返回结果 repo 就是你的仓库 ID
$token
就是 travis-ci 的 Token,记得授权获取到 GitHub / Gitte 的权限
4.测试函数
在阿里云点击运行函数,发现无报错即可成功同步语雀文章到自己博客。